// 不用任何判断语句和比较操作，返回两个数的最大值
// 测试链接 : https://www.nowcoder.com/practice/d2707eaf98124f1e8f1d9c18ad487f76
public class GetMaxWithoutJudge {
    public static void main(String[] args) {
        int a = Integer.MIN_VALUE;
        int b = Integer.MAX_VALUE;

        System.out.println(getMax(a,b));
    }

    //0和1的转换
    public static int flip(int num) {
        return num^1;
    }

    //非负返回1,负数返回0
    public  static int sigh(int num) {
        num = num >>> 31; //向右移动31位获取符号位的数字 非负为0，负数为1
        return flip(num); //将正数用1表示，负数用0表示
    }

    public static int  getMax(int a, int b) {
        int c = a - b;
        int sa = sigh(a);     //a的正负
        int sb = sigh(b);     //b的正负
        int sc = sigh(c);     //c的正负

        //判断a和b符号不相同为1，相同为0
        int diffAB = sa ^ sb;
        //a和b符号不相同为0，相同为1
        int sameAB = flip(diffAB);

        //返回a的条件
        //1.ab符号相同，并且c为正
        //2.ab符号不相同，并且a为正数
        int returnA = sc * sameAB + sa * diffAB;
        int returnB = flip(returnA);

        return a * returnA + b * returnB;
    }


}
